package org.yangyang.top100.P78Subsets;

import java.util.ArrayList;
import java.util.List;

/**
 * 2020-08-19
 * 给定一组不含重复元素的整数数组 nums，返回该数组所有可能的子集（幂集）。
 * 说明：解集不能包含重复的子集。
 * 输入: nums = [1,2,3]
 */
public class Solution {
    public List<List<Integer>> subsets(int[] nums) {
        List<List<Integer>> res=new ArrayList<>();
        backtrack(0,nums,res,new ArrayList<Integer>());
        return res;
    }

    private void backtrack(int i,int[] nums,List<List<Integer>> res, ArrayList<Integer> tmp){
        res.add(new ArrayList<Integer>(tmp));
        for(int j=i;j<nums.length;j++){
            tmp.add(nums[j]);
            backtrack(j+1,nums,res,tmp);
            tmp.remove(tmp.size()-1);
        }
    }
}
